let obj = {
    a: 1,
    b: 2,
}

// 得到属性描述符
/* 
    value => 值
    writable => 是否可重写
    enumerable => 是否可遍历
    configurable => 是否可修改描述符本身
*/
/* let desc = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(desc); */

// 设置属性描述符
Object.defineProperty(obj, 'a', {
    value: 10,
    writable: false,  // 不可重写
    enumerable: false  // 不可遍历
})

/* obj.a = 'abc';
console.log(obj.a); */  // 值仍为10

/* for(let key in obj) {
    console.log(key);  // 遍历不出a
} */

/* let keys = Object.keys(obj);
console.log(keys); */  // [ 'b' ]